package com.did.service;

import com.did.protocol.base.Did.AuthenticationProperty;
import com.did.protocol.base.Did.DidDocument;
import com.did.protocol.request.CreateDidResponse;
import com.did.protocol.base.Did.ServiceProperty;

import java.util.List;

/**
 * @author DELL
 * DID文档服务接口
 */
public interface DidDocumentService {

    /**
     * 创建一个Did，并分配一对公私钥
     *
     * @return DID创建后的公私钥对
     */
    CreateDidResponse createDid();

    /**
     * 指定的公钥来创建Did
     *
     * @param publicKey 公钥
     * @return DID创建后的公私钥对
     */
    CreateDidResponse createDid(String publicKey);


    /**
     * 根据Did查询DidDocument的json数据
     *
     * @param did DID身份标识
     * @return DID文档的json格式
     */
    String getDidDocumentJson(String did);

    /**
     * 根据Did查询DidDocument的object数据
     *
     * @param did DID身份标识
     * @return DID文档
     */
    DidDocument getDidDocument(String did);


    /**
     * 对Did文档设置服务属性
     *
     * @param did     DID身份标识
     * @param service DID服务模块
     * @return 设置结果
     */
    Boolean setService(String did, ServiceProperty service);


    /**
     * 在Did文档中设置验证属性
     *
     * @param did            DID身份标识
     * @param authentication DID验证模块
     * @return 设置结果
     */
    Boolean setAuthentication(String did, AuthenticationProperty authentication);


    /**
     * 检查该Did是否在链上
     *
     * @param did DID身份标识
     * @return 是否在链上
     */
    Boolean isDidExist(String did);

    /**
     * 获得Did数目
     *
     * @return 链上DID文档总数目
     */
    Integer getDidCount();

    /**
     * 通过公钥列表获得Did文档列表
     *
     * @param pubKeyList 公钥列表
     * @return 对应的DID文档列表
     */
    List<DidDocument> getDidListByPubKeyList(List<String> pubKeyList);

}
